from src.base.context import web_login_user, data_scope_var, tenant_var

"""
数据权限装饰器
"""


def data_scope(dept_table_alias: str, user_table_alias: str, dept_id_alias: str = 'dept_id',
               user_id_alias: str = 'user_id'):
    def decorator(fn):
        def inner(*args, **kwargs):
            login_user = web_login_user.get()
            data_scope_var.set({
                "dept_table_alias": dept_table_alias,
                "user_table_alias": user_table_alias,
                "dept_id_alias": dept_id_alias,
                "user_id_alias": user_id_alias,
                "user_id_values": login_user.data_scope.user_ids,
                "dept_id_values": login_user.data_scope.dept_ids
            })
            result = fn(*args, **kwargs)
            data_scope_var.set(None)
            return result

        return inner

    return decorator


"""
租户装饰器
"""


def tenant(tenant_table_alias: str, tenant_id_alias: str = 'tenant_id'):
    def decorator(fn):
        def inner(*args, **kwargs):
            login_user = web_login_user.get()
            tenant_var.set({
                "tenant_table_alias": tenant_table_alias,
                "tenant_id_alias": tenant_id_alias,
                "tenant_id_value": login_user.tenant_id,
            })
            result = fn(*args, **kwargs)
            tenant_var.set(None)
            return result

        return inner

    return decorator
